



// 205. 同构字符串
// https://leetcode.cn/problems/isomorphic-strings/
// 给定两个字符串 s 和 t ，判断它们是否是同构的。

// 如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。

// 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。

 

// 示例 1:

// 输入：s = "egg", t = "add"
// 输出：true

// 示例 2：

// 输入：s = "foo", t = "bar"
// 输出：false

// 示例 3：

// 输入：s = "paper", t = "title"
// 输出：true

 

// 提示：

//     1 <= s.length <= 5 * 104
//     t.length == s.length
//     s 和 t 由任意有效的 ASCII 字符组成


class Solution {
    bool isIsomorphic_(string s, string t) 
    {
        vector<int> map1;
        vector<int> map2;
        map1.resize(128, -1);
        int index = 0;
        for(const auto& e : s)
        {
            if(map1[e] == -1)
            {
                map1[e] = index;
                map2.push_back(index);
            }
            else
            {
                map2.push_back(map1[e]);
            }

            ++index;
        }

        for(const auto& e : map2) cout << e;
        cout <<endl;
        
        for(int i = 0;i < t.size();++i)
        {
            if(t[i] != t[map2[i]]) return false;
        }

        return true;
    }
public:
    bool isIsomorphic(string s, string t) {
        return isIsomorphic_(s, t) && isIsomorphic_(t, s);
    }
};